FORM/PC ――――――――――――――――――――――――――――――――――――――― I/O 1981年 5月号掲載 PC−8001 32K マシン語 08100H−0A007H コールド・スタート 08100H ホット・スタート  0850EH 起動方法 MON L G8100 ――――――――――――――――――――――――――――――――――――――― PC用Tiny FORTRAN カラーグラフィック命令が加わった整数型コンパイラ FORM/PC このたび、PC−8001用のTiny FORTRANを開発したので発表します。 ・――・――――――――――――――― |1/プログラムの起動方法 |/――――――――――――――――― まず、プログラムをリストからキーイン (または、カセットからロード)してください。 そして、PCのモニタから、 ・―――――――――――――――――・ | *G8100[CR]           | ・―――――――――――――――――・ としてください。 すると画面にタイトルが表示されます。 この状態でコンパイラが起動されています (何だかいつもと同じような画面だな〜・影の声)。 次に、エディタを起動しましょう。 キーボードから、 ・―――――――――――――――――・ | EIDT[CR]            | ・―――――――――――――――――・ としてください。 おや?[SHIFT] もしていないのに大文字ですよ不思議ですね? 試しに[SHIFT] を押してキーインしてみてください。 今度は小文字が表示されるでしょう。 ただし、英文字以外はいつもと同じです。 なお、FORTRANでは すべてのコマンドを必ず大文字で入力してください。 エディタが起動されると“>”が出力されて 入力待ちとなります。 エディタで使用できるコマンドを表1に示します。 LISTA以外はMZ版のFORMと同じです。 そうです。 このFORTRANはMZ版のFORMをPCに移殖して カラーグラフィックス命令を付け加えたものです。 ですから、 コンパイラのコマンドはFORMとまったく同じです。 ただし、『BYE』は『MON』となっています。 表2にコンパイラのコマンドを示します。 詳しくは1980年のI/O 6月号を見てください。 それから、『RUN』では 本FORTRANはBREAK文や STOP文の実行をスーパーバイズしないので、 モニタからGコマンドで再起動させてください。 なお、ホット・スタートは&H850D、 コールド・スタートは&H8100です。 プログラムのメモリ・マップを図1に示します。 オブジェクトのスタートアドレスは&HA000です。       表1 エディタ・コマンド ・――――――――――――――――――――――・ |コマンド|     機     能     | |――――+―――――――――――――――――| | I   |テキスト・エンドから挿入     | | L(,n) |リストの表示をn行目からする。  | |  (,p) |                 | | & |テキストのクリア         | | !   |コンパイラにジャンプ       | | W |カセットに出力          | | R |カセットから入力         | | B,n |n行目の上にインサート      | | D,n |n行目をデリート         | ・――――――――――――――――――――――・      表2 コンパイラ・モード時のコマンド ・――――――――――――――――――――――・ |コマンド|     機     能     | |――――+―――――――――――――――――| |EDIT  |エディタにジャンプ        | |――――+―――――――――――――――――| |COMPIL |テキストをメモリ から読んでコンパイル    | |――――+―――――――――――――――――| |EXEC  |テキストをCMT から読んでコンパイル 注1)| |――――+―――――――――――――――――| |BSAVE  |オブジェクトをCMT へSAVE(終了後モニタ ヘ)| |――――+―――――――――――――――――| |LIST  |A:すべてのリストを表示      | |    |E:エラー のある行を表示       | |    |N:エラー の総数とバイト数のみ表示  | |    |P:リスト をプリンタ に表示 注2)   | |    |C:上記をOFF          | |――――+―――――――――――――――――| |RUN   |オブジェクトを実行          | |――――+―――――――――――――――――| |MON   |モニタ ヘジャンプ[CTRL][B]でリターン   | ・――――――――――――――――――――――・ 注1)EXEC実行後はソース・エリアをクリアしてください。    EDIT[CR]&[CR] 注2)プリンタのない場合は[STOP]を押す。      図1 メモリ・マップ ・―――――――――――――――――・ |                 | |    ・――――――――・   | | 0000 | ROM    |   | |    |        |   | |    |        |   | | 8000 |――――――――|   | | 8100 |――――――――|   | |    |  ワーク・エリア   |   | |    |        |   | | 84F4 |――――――――|   | |    |■Tiny FORTRAN■|   | |    |■■■■■■■■|   | |    |■■本■体■■■|   | | 9C12 |――――――――|   | |    | リンク・パッケージ  |   | |    |        |   | |    | ↓オブジェクト展開|   | |    |       エリア|   | |    |――――――――|   | |    | テーブル     |   | |    |----------------|   | | E9FF | ↑ソース・エリア   |   | |    |――――――――|   | |    | N-BASIC    |   | | FFFF | ワーク&V-RAM   |   | |    |    エリア   |   | |    ・――――――――・   | ・―――――――――――――――――・        リスト1 FORM/PCのリスト出力 ・―――――――――――――――――――――――――――・ |                           | |0: WIDTH(80,25)                    | |1: CONSOLE 0,25,0,1                  | |2: COLOR7,0,1                     | |3: WRITE(12,A1)        →CRTのCLEAR  | |4:' イニシャル FOR PSET                  | |5: STR($9F23)=$C3                   | |6: STR($EB1D)=$2F \PRESETを使った後、        | |7: STR($EB1E)=$B0 /または初期状態のときに入れる。  | |8: PSET(X,Y)                     | |     :                     | |                           | |     :                     | ・―――――――――――――――――――――――――――・ ・――・――――――――――――――― |2/ プログラムの起動方法 |/――――――――――――――――― 本FORTRANのステートメントを表3に、関数表4に示します。 ステートメント、関数はMZ版FORM文法を参考にしてください。 ここでは追加、または変更た部分を説明します。         表3 ステートメント一覧表 ・――――――――――――――――――――――――――――――――・ |ステートメント|    機  能 (詳しくはFORMを参照)  | |―――――――+――――――――――――――――――――――――| |GOTOn     |行番号nにジャンプ               | |IF(式)x,y,z  |式<0ならx、0ならy、>0ならzにJUMP      | |DOx変数=n,m,l |ループの指定xは端末文の行番、         | |       |nは初期値、mはは終値、lは増分        | |CONTINUE   |非実行文、DOの端末に使用            | |CALLn     |行番nからの副プログラムをコール        | |RETURN    |副プログラムよりリターン            | |PAUSEn    |一時停止。[SHIFT] でストップ 。他のキーで続行   | |STOPn     |プログラムの停止                | |BREAK     |[STOP]キーのチェック              | |USR(アドレス) |アドレスからの機械語をコール          | |       |(BC=9FE2、HL=9FE6、DE=9FE4、AF=9FE0)   | |END      |プログラムの終了(必ず入れる)         | |PSET(x,y)   |(x,y)にドットをセット(0≦x≦159      | |PTESET(x,y)  |(x,y)にドットをリ七ット 0≦y≦99)    | |READ(変数,型) |数値をキーボードより入力            | |WRITE(式,型) |数値を出力                   | |WIDTH(a,b)  |aは横、bは縦                 | |CONSOLE    |N−BASICと同じ              | |OUT(n)    |機械語を書き込む                | |STR(n)    |メモリから機械語を読み込む           | ・――――――――――――――――――――――――――――――――・         表4 関数一覧表 ・―――――――――――――――――――――――――――・ |関数|   機  能   |    使 用 例    | |――+――――――――――+―――――――――――――| |LOD |メモリからロード  |A=LOD($F300)       | |INP |I/Oからインプット |A=INP(32)         | |MOD |余りを与える。   |R=MOD(3,2) 3÷2の余り | |RND |乱数を与える。   |X=RND(5)  0〜4の乱数 | |ABS |絶対値を与える。  |S=ABS(-1)         | |GET |リアル・タイムキーイン    |K=GET           | |LOW |下位8ビットを与える。|L=LOW($1234)       | ・―――――――――――――――――――――――――――・ ■ステートメント (1)CONSOLE a,b,c,d N−BASICと同様です。a  aはスクロールの開始行,  bはスクロール幅,  cはファンクション・キーの表のon、off (1でon、0でoff )、  dは白黒/カラーの切り替え(1でカラー、0で白黒)で、  省略はできません. (2)COLOR a,b,C  aは色(0≦a≦7),  bはヌル・キャラクタ,  cはグラフィック・スイッチ  (1でon,0でoff )です。 (3)PSET(X,Y)  X,Yは画面上の座標(0≦X≦ 159,0≦Y≦99)ですが、  色の指定はできないのでCOLOR文とペアで使ってください。 (4)PRESET(X,Y)  PSETと同様でX,Yの示す座標のドットを消します。 (5)WIDTH(a,b)  カッコの必要であることに注意してください。  aは画面の横幅(36、40、72または80),  bは縦幅(20または25) (6)OUT(a)=b  MZ版FORMのステートメント『IOC』と同等です。  aは出力ポートのアドレス,  bは出力するデータです。 (7)STR(a)=b  MZ版FORMのステートメントのMEMと同等です。  aはメモリのアドレス,  bは書き込むデータです。 ■関数 (1)INP(a)  FORMの関数IOCと同等です。  aは入力ポートのアドレスです。 (2)LOD(a)  FORMの関数MEMと同等です。  aはメモリのアドレスです。  以上が追加、変更したところです。  移殖のときに注意してください。 ・――・――――――――――――――― |3/    最 後 に |/――――――――――――――――― PSET、PRESETのスピードは リスト1のようにすれば少しは速くなります。 バグやわかりにくいところがありましたら、 編集部経由でお知らせください。 最後にこのプログラムを開発するにあたり 協力してくださいました藤田直則氏、 およびFORMのアセンブル・リストを発表した ハドソン・ソフトに感謝します。 【】参考文献 1)ハドソン・ソフト:“FORM”、I/O、’80年5〜9月号